/**
* @param {number[]} nums
* @return {number[][]}
*/
// 回溯：选与不选
var subsets = function (nums) {
    let path = []
    const dfs = (index, ans = []) => {
        if (index === nums.length) {
            ans.push(path.concat())
            return
        }
        // 选择当前元素
        path.push(nums[index])
        dfs(index + 1, ans)
        path.pop() // 恢复现场
        dfs(index + 1, ans) // 不选当前元素，进入下一阶段
        return ans
    }
    return dfs(0)
};